package com.amado.course35Concurrent;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.UUID;

/**
 * HashMap,HashTable hashTable不允许null值与null键
 * 
 * @author Administrator
 *
 */
public class S03HashMapHashTable {
	static Map<String, String> hashMap = new HashMap<>();
	static Map<String, String> hashTable = new Hashtable<>();
	public static void main(String[] args) {

	}

	/**
	 * 每一个线程都会new一个hashMap,这个方法的代码是安全的
	 */
	public static void add() {
		Map<String, String> hashMap = new HashMap<>();
//		Map<String, String> hashTable = new Hashtable<>();
		System.out.println("sadf");
		for (int i = 0; i < 500; i++) {
			for (int j = 0; j < 100; j++) {
				hashMap.put(UUID.randomUUID().toString(), "1");
				// 在hashTable上加锁
//				hashTable.put("a", "b");
			}
		}
	}
	/**
	 * 所有线程共用hashMap,但同一时间只有一个线程进入synchronized方法，所以这个方法线程安全的
	 */
	public static synchronized void addOthers() {
//		Map<String, String> hashTable = new Hashtable<>();
		System.out.println("sadf");
		for (int i = 0; i < 500; i++) {
			for (int j = 0; j < 100; j++) {
//				hashMap.put(UUID.randomUUID().toString(), "1");
				// 在hashTable上加锁
				hashTable.put("a", "b");
			}
		}
	}
	/**
	 * 每一个线程都会new一个hashMap,这个方法是线程安全的
	 */
	public static void addOther() {
//		Map<String, String> hashTable = new Hashtable<>();
		System.out.println("sadf");
		for (int i = 0; i < 500; i++) {
			for (int j = 0; j < 100; j++) {
//				hashMap.put(UUID.randomUUID().toString(), "1");
				// 在hashTable上加锁
				hashTable.put("a", "b");
			}
		}
	}
}